﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using PreCommitHook.Logica.Comandos;
using PreCommitHook.Logica.Interfaces;

namespace PreCommitHook.Logica.FabricaLogica
{
    public abstract class FabricaComandoRegla
    {
        public FabricaComandoRegla()
        {
          
        }
               
        public abstract IComandoValidarArchivo ObtenerValidarArchivo();
        public abstract IComandoParsear ObtenerComandoParsear();
        public abstract IConsultarEspacioParentesis ObtenerConsultarEspacioParentesis();
        public static FabricaComandoRegla ObtenerFabricaComandoParsear()
        {
            return new FabricaComandoParsear();
        }

        public static FabricaComandoRegla ObtenerFabricaConsultarEspacioParentesis()
        {
            return new FabricaConsultarEspacioOperadores();
        }

        public abstract IConsultarEspacioParentesis ObtenerConsultarEspacioParentesisCEF();
        public abstract IConsultarEspacioParentesis ObtenerConsultarEspacioParentesisEX();

        public abstract IConsultarEspacioParentesis ObtenerConsultarEspacioParentesisIN();

        public abstract IConsultarEspacioParentesis ObtenerConsultarEspacioParentesisSE();
        public abstract IConsultarEspacioOperadores ObtenerFabricaConsultarEspacioOperadoresConEspacio();

        public abstract IConsultarEspacioOperadores ObtenerFabricaConsultarEspacioOperadoresSinEspacio();

        public abstract IConsultarDocumentMetodo ObtenerConsultarDocumentMetodoDobleSlash();

        public abstract IConsultarDocumentMetodo ObtenerConsultarDocumentMetodoSlashAsterisco();
        public static FabricaComandoRegla ObtenerFabricaConsultarEspacioOperadores()
        {
            return new FabricaConsultarEspacioOperadores();
        }
        public static FabricaComandoRegla ObtenerFabricaConsultarNombreClase()
        {
            return new FabricaConsultarNombreClase();
        }
        public abstract IConsultarNombreClase ObtenerConsultarNombreClaseMayusNoUnder();
        public abstract IConsultarNombreClase ObtenerConsultarNombreClaseMayusNoUnder();

        public abstract IConsultarNombreClase ObtenerConsultarNombreClaseMayusSiUnder();

        public abstract IConsultarNombreClase ObtenerConsultarNombreClaseMinusNoUnder();

        public abstract IConsultarNombreClase ObtenerConsultarNombreClaseMinusSiUnder();
        public abstract IConsultarLlaves ObtenerConsultarLlavesSolas();
        public static FabricaComandoRegla ObtenerFabricaConsultarLlaves()
        {
            return new FabricaConsultarLlaves();
        }
        public abstract IConsultarLlaves ObtenerConsultarLlavesJuntas();
        public abstract IConsultarLlaves ObtenerConsultarLlavesCompJS();

        public abstract IConsultarLlaves ObtenerConsultarLlavesCompSJ();
        public static FabricaComandoRegla ObtenerFabricaConsultarDocumentClase()
        {
            return new FabricaConsultarDocumentClase();
        }

    }
}